Jump To:
Technical Q&As
The I/O Kit is the device driver subsystem of Mac OS X, and is part of Darwin. The I/O Kit provides a set of C functions and C++ classes, including object-oriented abstractions common to various families of drivers. In addition, for many device types, the I/O Kit provides a device interface that enables an application to communicate with and control a device from user space.

Device Drivers Resources
A guided introduction and learning path for developers writing software that accesses devices in Mac OS X.   Essential information for developers working with device drivers.   Descriptions of driver interface elements, by library and framework.
Document Descriptions
On Off
Display

Sort by
Title
Sorted by
Topic
Sort by
Date
Making sense of IOKit error codes (HTML) ()
QA1075: Explains how to interpret I/O Kit error codes.
PCI and PC Card 2002-02-07
Mapping kernel memory to user space on Mac OS X 10.2 (HTML) ()
QA1197: Describes a change to mapping kernel memory to user space affecting Mac OS X 10.2 and later.
PCI and PC Card 2002-09-13
Open Firmware and the devalias node (HTML)
HW95: Describes why the contents of the Open Firmware devalias node varies between Macintosh models.
PCI and PC Card 2000-09-05
Open Firmware device tree nodes (HTML)
HW86: Explains the usage of the "@n" notation in Open Firmware device tree nodes.
PCI and PC Card 2000-09-05
Open Firmware Memory bus speed (HTML)
HW97: Describes a method to display memory bus speed for G3 or G4 Macintosh in Open Firmware.
PCI and PC Card 2000-09-22
The "packages" node in the device tree (HTML)
HW90: Describes the "packages" node in the Open Firmware device tree.
PCI and PC Card 2000-09-05
PCI address/data stepping (HTML)
HW94: Explains that Apple does not support PCI address/data stepping.
PCI and PC Card 2000-09-05
PCI bus on the iMac (HTML) ()
HW42: Explains that the iMac has a PCI bus even though it has no expansion slots.
PCI and PC Card 1999-02-15
PCI Bus? (HTML)
QA1104: Answers the question, "Do all Macintosh computers have a PCI bus?"
PCI and PC Card 2001-12-21
PCI Header types (HTML)
HW78: Describes the three required types of PCI headers to be provided in its configuration header space.
PCI and PC Card 1999-11-15
PCI SIG (HTML) ()
HW55: Describes the meaning of the acronym PCI SIG.
PCI and PC Card 1999-03-29
PCI/PCI-X slots on the Power Mac G5 (HTML)
QA1307: Discusses installing PCI/PCI-X cards of different speeds in the Power Mac G5.
PCI and PC Card 2003-09-30
Power Management; Policy Maker vs. Power Controller (HTML) ()
QA1121: Describes the differences between a Power Management Policy Maker and a Power Management Power Controller.
PCI and PC Card 2002-02-13
Sample code for allocating an amount of dictionary space (HTML)
HW71: Discusses the allocation and the setting of memory for Dictionary space in Open Firmware.
PCI and PC Card 1999-10-11
Sleep vs. Doze on Mac OS X (HTML)
QA1309: Discusses and demonstrates sleep versus doze detection on Machintosh Mac OS X
PCI and PC Card 2003-10-09
Using "words" in Open Firmware (HTML)
HW73: Explains how to search for specific entries within all the global and local Open Firmware words.
PCI and PC Card 1999-10-11
Was that a path I just saw? (HTML)
HW101: Describes the Open Firmware path that is occasionally shown at boot time.
PCI and PC Card 2000-10-06
What are configuration variables in Open Firmware? (HTML) ()
HW38: Defines the configuration variables in Open Firmware.
PCI and PC Card 1999-02-15
What are generic names in Open Firmware? (HTML) ()
HW34: Documents the generic names in Open Firmware.
PCI and PC Card 1999-02-15
What is a CardBus host bus adapter HBA? (HTML)
HW79: Explains what a CardBus host bus adapter (HBA) is and discusses its implementation on the Macintosh.
PCI and PC Card 1999-11-15
What is a tokenizer? (HTML) ()
HW58: Defines a tokenizer.
PCI and PC Card 1999-03-29
What is an Open Firmware devalias? (HTML)
HW99: Describes devaliases in Open Firmware.
PCI and PC Card 2000-10-06
What is an Open Firmware phandle, and why can't I access it from the Mac OS? (HTML)
HW76: Explains an "Open Firmware phandle" and why it is inaccessible from the Mac OS.
PCI and PC Card 1999-11-15
What is the "dump" word and how do I use it? (HTML)
HW68: Describes the function of the Open Firmware word "dump" and how it can be used.
PCI and PC Card 1999-10-11
What is the return stack in Open Firmware and can I use it? (HTML)
HW67: Describes the purpose of the Open Firmware return stack and how developers can use it.
PCI and PC Card 1999-10-11
What numeric base is the default for the Open Firmware user interface? (HTML)
HW65: Describes how the default numeric base used by the Open Firmware user interface is hexadecimal.
PCI and PC Card 1999-10-11
When to use PCMCIA, PC Card, and CardBus (HTML)
HW77: Explains the differences between PCMCIA, PC Card, and CardBus.
PCI and PC Card 1999-11-15
Why did the name of the PCI bridge change? (HTML) ()
HW59: Explains the name change of the PCI bridge to the generic name "pci" in Open Firmware.
PCI and PC Card 1999-03-29
Why didn't I boot from the CD? (HTML)
HW98: Describes the behavior of holding down the "c" key at boot time.
PCI and PC Card 2000-10-06
Working with Configuration Variables (HTML) ()
QA1119: Explains how to delete a specific Open Firmware configuration variable without using Command-Option-P-R.
PCI and PC Card 2002-02-13
Are the Name Registry device tree nodes unique? (HTML)
Deprecated - HW64: Discusses whether Name Registry nodes copied from the Open Firmware device tree are unique.
Printing 1999-10-11
Checking for the Printer Driver (HTML)
DV42: Describes a legacy Mac OS technique avoiding system hangs when using serial drivers on USB systems.
Printing 2000-06-19
Expansion ROM device properties (HTML) ()
HW50: Describes the Open Firmware properties that should be included in a boot device's expansion ROM.
Printing 1999-03-29
Generating an NMI Without a Programmer's Switch (HTML) ()
QA1264: Explains how to generate a non-maskable interrupt (NMI) on CPUs without programmer's switches.
Printing 2004-04-26
Getting started with Forth (HTML) ()
HW53: Describes where FCode driver developers can get information about the Forth programming language.
Printing 1999-03-29
IODeviceTree & the IORegistry (HTML) ()
QA1120: Describes the IODeviceTree plane in the Mac OS X IORegistry.
Printing 2002-02-13
IOKit Framework Headers (HTML) ()
QA1107: Describes the differences between the headers in IOKit.framework and the I/O Kit headers in Kernel.framework.
Printing 2002-01-15
Is the Open Firmware device tree object oriented? (HTML)
HW80: Discusses the object-oriented attributes of the Open Firmware device tree.
Printing 1999-11-15
New PPD keywords available in Mac OS X version 10.3 (HTML)
QA1352: Describes the new PPD keywords available for CUPS filters in Mac OS X 10.3.
Printing 2004-05-26
The "packages" node in the device tree (HTML)
HW90: Describes the "packages" node in the Open Firmware device tree.
Printing 2000-09-05
Power Management; Policy Maker vs. Power Controller (HTML) ()
QA1121: Describes the differences between a Power Management Policy Maker and a Power Management Power Controller.
Printing 2002-02-13
Retain Counts of io_object_t Objects in IOKit.framework (HTML) ()
QA1195: Distinguishes between the retain counts of an I/O Kit kernel object and its io_object_t user space proxy.
Printing 2002-09-04
SCSIAction and IOSCSIUserClient on Mac OS X 10.2 (HTML) ()
QA1201: Describes migrating to a new API for SCSI Parallel devices starting with Mac OS X 10.2.
Printing 2002-09-13
Why does logging keep my Printer Module from working? (HTML) ()
Deprecated - QA1182: Describes some problems with standard printf logging in a Printer Module on Jaguar.
Printing 2002-11-06
Why don't all of my PDE localizations show up in all applications? (HTML) ()
QA1185: Explains why some PDE localizations might not appear in all applications.
Printing 2002-10-16
Expansion ROM device properties (HTML) ()
HW50: Describes the Open Firmware properties that should be included in a boot device's expansion ROM.
Scanners 1999-03-29
Generating an NMI Without a Programmer's Switch (HTML) ()
QA1264: Explains how to generate a non-maskable interrupt (NMI) on CPUs without programmer's switches.
Scanners 2004-04-26
Getting started with Forth (HTML) ()
HW53: Describes where FCode driver developers can get information about the Forth programming language.
Scanners 1999-03-29
IODeviceTree & the IORegistry (HTML) ()
QA1120: Describes the IODeviceTree plane in the Mac OS X IORegistry.
Scanners 2002-02-13
IOKit Framework Headers (HTML) ()
QA1107: Describes the differences between the headers in IOKit.framework and the I/O Kit headers in Kernel.framework.
Scanners 2002-01-15
Is the Open Firmware device tree object oriented? (HTML)
HW80: Discusses the object-oriented attributes of the Open Firmware device tree.
Scanners 1999-11-15
Mapping kernel memory to user space on Mac OS X 10.2 (HTML) ()
QA1197: Describes a change to mapping kernel memory to user space affecting Mac OS X 10.2 and later.
Scanners 2002-09-13
The "packages" node in the device tree (HTML)
HW90: Describes the "packages" node in the Open Firmware device tree.
Scanners 2000-09-05
Power Management; Policy Maker vs. Power Controller (HTML) ()
QA1121: Describes the differences between a Power Management Policy Maker and a Power Management Power Controller.
Scanners 2002-02-13
Retain Counts of io_object_t Objects in IOKit.framework (HTML) ()
QA1195: Distinguishes between the retain counts of an I/O Kit kernel object and its io_object_t user space proxy.
Scanners 2002-09-04
SCSIAction and IOSCSIUserClient on Mac OS X 10.2 (HTML) ()
QA1201: Describes migrating to a new API for SCSI Parallel devices starting with Mac OS X 10.2.
Scanners 2002-09-13
Sending SCSI commands to storage devices (HTML) ()
QA1179: Explains that Mac OS X does not implement SCSI pass-through for many mass storage devices.
Scanners 2002-08-06
Adding dependencies with kmodload (HTML)
QA1097: Illustrates how to specify dependencies when using kmodload.
SCSI 2001-12-05
ANSI SCSI Standards (HTML)
Deprecated - DV03: Describes past Macintosh systems that did not fully support the ANSI SCSI-1 standard.
SCSI 1995-07-01
Detecting a CD-ROM (HTML) ()
DV18: Demonstrates CD-ROM drive detection.
SCSI 1997-01-31
The dreaded "incompatible flag -framework" error (HTML)
QA1096: Explains how to eliminate the incompatible flag -framework error in Project Builder.
SCSI 2001-12-05
Expansion ROM device properties (HTML) ()
HW50: Describes the Open Firmware properties that should be included in a boot device's expansion ROM.
SCSI 1999-03-29
Generating an NMI Without a Programmer's Switch (HTML) ()
QA1264: Explains how to generate a non-maskable interrupt (NMI) on CPUs without programmer's switches.
SCSI 2004-04-26
Getting a List of Drivers & LUNs (logical unit numbers) (HTML)
Deprecated - DV04: Describes a legacy Mac OS technique for obtaining a list of SCSI Parallel drivers, devices, and LUNs.
SCSI 1995-07-01
Getting started with Forth (HTML) ()
HW53: Describes where FCode driver developers can get information about the Forth programming language.
SCSI 1999-03-29
Installing an I/O Kit KEXT Without Rebooting (HTML)
QA1319: Describes the state of the art of installing I/O Kit kernel extensions (KEXTs) without requiring a restart.
SCSI 2003-10-28
IODeviceTree & the IORegistry (HTML) ()
QA1120: Describes the IODeviceTree plane in the Mac OS X IORegistry.
SCSI 2002-02-13
IOKit Framework Headers (HTML) ()
QA1107: Describes the differences between the headers in IOKit.framework and the I/O Kit headers in Kernel.framework.
SCSI 2002-01-15
Is the Open Firmware device tree object oriented? (HTML)
HW80: Discusses the object-oriented attributes of the Open Firmware device tree.
SCSI 1999-11-15
Issues with boot time KEXT loading (HTML) ()
QA1087: Explains how to solve problems with loading KEXTs at boot time.
SCSI 2004-01-15
Making sense of IOKit error codes (HTML) ()
QA1075: Explains how to interpret I/O Kit error codes.
SCSI 2002-02-07
Mapping kernel memory to user space on Mac OS X 10.2 (HTML) ()
QA1197: Describes a change to mapping kernel memory to user space affecting Mac OS X 10.2 and later.
SCSI 2002-09-13
Open Firmware and the devalias node (HTML)
HW95: Describes why the contents of the Open Firmware devalias node varies between Macintosh models.
SCSI 2000-09-05
The "packages" node in the device tree (HTML)
HW90: Describes the "packages" node in the Open Firmware device tree.
SCSI 2000-09-05
Power Management; Policy Maker vs. Power Controller (HTML) ()
QA1121: Describes the differences between a Power Management Policy Maker and a Power Management Power Controller.
SCSI 2002-02-13
Retain Counts of io_object_t Objects in IOKit.framework (HTML) ()
QA1195: Distinguishes between the retain counts of an I/O Kit kernel object and its io_object_t user space proxy.
SCSI 2002-09-04
SCSI ID from vRefNum (HTML) ()
DV29: Legacy Mac OS technique for identifying the ID of a SCSI Parallel device containing a specified disk volume.
SCSI 1997-05-23
A SCSI little secret (HTML)
HW81: Details what to expect when accessing the motherboard SCSI bus on the Blue & White G3.
SCSI 1999-12-20
SCSIAction and IOSCSIUserClient on Mac OS X 10.2 (HTML) ()
QA1201: Describes migrating to a new API for SCSI Parallel devices starting with Mac OS X 10.2.
SCSI 2002-09-13
Sending SCSI commands to storage devices (HTML) ()
QA1179: Explains that Mac OS X does not implement SCSI pass-through for many mass storage devices.
SCSI 2002-08-06
Workaround for Asynchronous SCSIAction Crashes (HTML) ()
Deprecated - QA1129: Explains how to workaround asynchronous SCSIAction crashes on Mac OS X.
SCSI 2002-03-21
Adding dependencies with kmodload (HTML)
QA1097: Illustrates how to specify dependencies when using kmodload.
Serial 2001-12-05
The dreaded "incompatible flag -framework" error (HTML)
QA1096: Explains how to eliminate the incompatible flag -framework error in Project Builder.
Serial 2001-12-05
Expansion ROM device properties (HTML) ()
HW50: Describes the Open Firmware properties that should be included in a boot device's expansion ROM.
Serial 1999-03-29
Generating an NMI Without a Programmer's Switch (HTML) ()
QA1264: Explains how to generate a non-maskable interrupt (NMI) on CPUs without programmer's switches.
Serial 2004-04-26
Getting started with Forth (HTML) ()
HW53: Describes where FCode driver developers can get information about the Forth programming language.
Serial 1999-03-29
Installing an I/O Kit KEXT Without Rebooting (HTML)
QA1319: Describes the state of the art of installing I/O Kit kernel extensions (KEXTs) without requiring a restart.
Serial 2003-10-28
Installing smart card reader drivers (HTML)
QA1359: Updates obsolete information contained in the pcscd(8) man page on Mac OS X Jaguar and Panther.
Serial 2004-08-30
IODeviceTree & the IORegistry (HTML) ()
QA1120: Describes the IODeviceTree plane in the Mac OS X IORegistry.
Serial 2002-02-13
IOKit Framework Headers (HTML) ()
QA1107: Describes the differences between the headers in IOKit.framework and the I/O Kit headers in Kernel.framework.
Serial 2002-01-15
Is the Open Firmware device tree object oriented? (HTML)
HW80: Discusses the object-oriented attributes of the Open Firmware device tree.
Serial 1999-11-15
Issues with boot time KEXT loading (HTML) ()
QA1087: Explains how to solve problems with loading KEXTs at boot time.
Serial 2004-01-15
Making sense of IOKit error codes (HTML) ()
QA1075: Explains how to interpret I/O Kit error codes.
Serial 2002-02-07
Mapping kernel memory to user space on Mac OS X 10.2 (HTML) ()
QA1197: Describes a change to mapping kernel memory to user space affecting Mac OS X 10.2 and later.
Serial 2002-09-13
The "packages" node in the device tree (HTML)
HW90: Describes the "packages" node in the Open Firmware device tree.
Serial 2000-09-05
Power Management; Policy Maker vs. Power Controller (HTML) ()
QA1121: Describes the differences between a Power Management Policy Maker and a Power Management Power Controller.
Serial 2002-02-13
Serial API Choice (HTML)
DV39: Discusses the choice of serial APIs supported by traditional Mac OS and Mac OS X.
Serial 2001-07-02
Expansion ROM device properties (HTML) ()
HW50: Describes the Open Firmware properties that should be included in a boot device's expansion ROM.
Still Cameras 1999-03-29
Generating an NMI Without a Programmer's Switch (HTML) ()
QA1264: Explains how to generate a non-maskable interrupt (NMI) on CPUs without programmer's switches.
Still Cameras 2004-04-26
Getting started with Forth (HTML) ()
HW53: Describes where FCode driver developers can get information about the Forth programming language.
Still Cameras 1999-03-29